package com.app.ryjy.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 学位枚举
 */
@AllArgsConstructor
@Getter
public enum DegreeEnum {
    // 名誉博士
    HONORIS_CAUSAE_DOCTOR("名誉博士", 100, -1),
    // 博士
    DOCTOR("博士", 200, -1),
    // 哲学博士学位
    PH_D("哲学博士学位", 201, -1),
    // 经济学博士学位
    ECONOMICS_PH_D("经济学博士学位", 202, -1),
    // 法学博士学位
    LAW_PH_D("法学博士学位", 203, -1),
    // 教育学博士学位
    EDUCATION_PH_D("教育学博士学位", 204, -1),
    // 文学博士学位
    LITERATURE_PH_D("文学博士学位", 205, -1),
    // 历史学博士学位
    HISTORY_PH_D("历史学博士学位", 206, -1),
    // 理学博士学位
    SCIENCE_PH_D("理学博士学位", 207, -1),
    // 工学博士学位
    ENGINEERING_PH_D("工学博士学位", 208, -1),
    // 农学博士学位
    AGRICULTURE_PH_D("农学博士学位", 209, -1),
    // 医学博士学位
    MEDICAL_PH_D("医学博士学位", 210, -1),
    // 军事学博士学位
    MILITARY_PH_D("军事学博士学位", 211, -1),
    // 管理学博士学位
    MANAGEMENT_PH_D("管理学博士学位", 212, -1),
    // 临床医学博士专业学位
    CLINICAL_MEDICINE_PROFESSIONAL_DOCTOR("临床医学博士专业学位", 245, -1),
    // 兽医博士专业学位
    VETERINARY_PROFESSIONAL_DOCTOR("兽医博士专业学位", 248, -1),
    // 口腔医学博士专业学位
    STOMATOLOGY_PROFESSIONAL_DOCTOR("口腔医学博士专业学位", 250, -1),
    // 硕士
    MASTER("硕士", 300, -1),
    // 哲学硕士学位
    PHILOSOPHY_MASTER("哲学硕士学位", 301, -1),
    // 经济学硕士学位
    ECONOMICS_MASTER("经济学硕士学位", 302, -1),
    // 法学硕士学位
    LAW_MASTER("法学硕士学位", 303, -1),
    // 教育学硕士学位
    EDUCATION_MASTER("教育学硕士学位", 304, -1),
    // 文学硕士学位
    LITERATURE_MASTER("文学硕士学位", 305, -1),
    // 历史学硕士学位
    HISTORY_MASTER("历史学硕士学位", 306, -1),
    // 理学硕士学位
    SCIENCE_MASTER("理学硕士学位", 307, -1),
    // 工学硕士学位
    ENGINEERING_MASTER("工学硕士学位", 308, -1),
    // 农学硕士学位
    AGRICULTURE_MASTER("农学硕士学位", 309, -1),
    // 医学硕士学位
    MEDICAL_MASTER("医学硕士学位", 310, -1),
    // 军事学硕士学位
    MILITARY_MASTER("军事学硕士学位", 311, -1),
    // 管理学硕士学位
    MANAGEMENT_MASTER("管理学硕士学位", 312, -1),
    // 法律硕士专业学位
    LEGAL_PROFESSIONAL_MASTER("法律硕士专业学位", 341, -1),
    // 教育硕士专业学位
    EDUCATION_PROFESSIONAL_MASTER("教育硕士专业学位", 342, -1),
    // 工程硕士专业学位
    ENGINEERING_PROFESSIONAL_MASTER("工程硕士专业学位", 343, -1),
    // 建筑学硕士专业学位
    ARCHITECTURE_PROFESSIONAL_MASTER("建筑学硕士专业学位", 344, -1),
    // 临床学硕士专业学位
    CLINICAL_PROFESSIONAL_MASTER("临床学硕士专业学位", 345, -1),
    // 工商管理硕士专业学位
    MBA("工商管理硕士专业学位", 346, -1),
    // 农业推广硕士专业学位
    AGRICULTURAL_PROMOTION_PROFESSIONAL_MASTER("农业推广硕士专业学位", 347, -1),
    // 兽医硕士专业学位
    VETERINARY_PROFESSIONAL_MASTER("兽医硕士专业学位", 348, -1),
    // 公共管理硕士专业学位
    PUBLIC_ADMINISTRATION_PROFESSIONAL_MASTER("公共管理硕士专业学位", 349, -1),
    // 口腔医学硕士专业学位
    STOMATOLOGY_PROFESSIONAL_MASTER("口腔医学硕士专业学位", 350, -1),
    // 公共卫生硕士专业学位
    PUBLIC_HEALTH_PROFESSIONAL_MASTER("公共卫生硕士专业学位", 351, -1),
    // 军事硕士专业学位
    MILITARY_PROFESSIONAL_MASTER("军事硕士专业学位", 352, -1),
    // 学士
    BACHELOR("学士", 400, -1),
    // 哲学学士学位
    PHILOSOPHY_BACHELOR("哲学学士学位", 401, -1),
    // 经济学学士学位
    ECONOMICS_BACHELOR("经济学学士学位", 402, -1),
    // 法学学士学位
    LAW_BACHELOR("法学学士学位", 403, -1),
    // 教育学学士学位
    EDUCATION_BACHELOR("教育学学士学位", 404, -1),
    // 文学学士学位
    LITERATURE_BACHELOR("文学学士学位", 405, -1),
    // 历史学学士学位
    HISTORY_BACHELOR("历史学学士学位", 406, -1),
    // 理学学士学位
    SCIENCE_BACHELOR("理学学士学位", 407, -1),
    // 工学学士学位
    ENGINEERING_BACHELOR("工学学士学位", 408, -1),
    // 农学学士学位
    AGRICULTURE_BACHELOR("农学学士学位", 409, -1),
    // 医学学士学位
    MEDICAL_BACHELOR("医学学士学位", 410, -1),
    // 军事学学士学位
    MILITARY_BACHELOR("军事学学士学位", 411, -1),
    // 管理学学士学位
    MANAGEMENT_BACHELOR("管理学学士学位", 412, -1),
    // 建筑学学士专业学位
    ARCHITECTURE_PROFESSIONAL_BACHELOR("建筑学学士专业学位", 444, -1),
    // 其他
    OTHER("其他", 900, -1);

    private final String desc;
    private final int code;
    private final int bizCode;

    /**
     * 根据 bizCode 获取 code
     *
     * @param bizCode bizCode
     * @return code
     */
    public static int getCodeByBizCode(int bizCode) {
        for (DegreeEnum degree : values()) {
            if (degree.getBizCode() == bizCode) {
                return degree.getCode();
            }
        }
        throw new RuntimeException("bizCode 不存在");
    }

    public static void main(String[] args) {
        System.out.println(DegreeEnum.getCodeByBizCode(100));
    }
}